/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package interfacesGraficas.JDialogs;

import entidadesNegocio.ListaMateriales;
import excepciones.ExpertoProveedoresException;
import expertos.ExpertoProveedores;
import interfacesGraficas.Controlador;
import interfacesGraficas.ControladorProveedores;
import interfacesGraficas.ModeloTablas.ModeloTabla;
import interfacesGraficas.ModeloTablas.ModeloTablaListaMateriales;
import interfacesGraficas.ModeloTablas.ModeloTablaListasMaterialesProv;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author diego
 */
public class ControladorProveedoresNuevaListaMateriales extends Controlador{
    
    PantallaProveedoresNuevaListaMateriales pantalla;
    ExpertoProveedores experto;
    ControladorProveedores controlaorProveedores;
    
    ModeloTablaListaMateriales modeloTablaListaMateriales;

    public ControladorProveedoresNuevaListaMateriales(ExpertoProveedores experto, ControladorProveedores ControlaorProveedores) {
        this.experto = experto;
        this.controlaorProveedores = ControlaorProveedores;
        pantalla = new PantallaProveedoresNuevaListaMateriales();
        
        modeloTablaListaMateriales = new ModeloTablaListaMateriales();
        pantalla.getTblListasMateriales().setModel(new ModeloTablaListasMaterialesProv());
        
        
        //boton copiar Lista
        pantalla.getBtnCopiarLista().addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                int fila = pantalla.getTblListasMateriales().getSelectedRow();
                if(fila != -1){
                nuevaListaMateriales((ListaMateriales) ((ModeloTablaListasMaterialesProv) pantalla.getTblListasMateriales().getModel()).getListaElementos().get(fila));
                }else{
                    JOptionPane.showMessageDialog(pantalla, "Debe Seleccinar una lista para generar la Nueva a partir de ella.","INFORMACIÓN", JOptionPane.INFORMATION_MESSAGE);
                }
            }
        });
        //boton modificar lista
        pantalla.getBtnModificarLista().addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                int fila = pantalla.getTblListasMateriales().getSelectedRow();

                controlaorProveedores.mostrarListaProveedor((ListaMateriales) ((ModeloTablaListasMaterialesProv) pantalla.getTblListasMateriales().getModel()).getListaElementos().get(fila));
            }
        });
        //boton eliminar lista
        pantalla.getBtnEliminarLista().addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                eliminarListaSeleccionada();
            }
        });
        //boton Nueva Lista
        pantalla.getBtnNuevaLista().addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                nuevaListaMateriales(null);
            }
        });
        //tabla listas de materiales
        pantalla.getTblListasMateriales().addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                    int fila = pantalla.getTblListasMateriales().rowAtPoint(e.getPoint());
                    controlaorProveedores.mostrarListaProveedor((ListaMateriales) ((ModeloTablaListasMaterialesProv) pantalla.getTblListasMateriales().getModel()).getListaElementos().get(fila));
                }

            }
        });
    }

    @Override
    public void iniciar() {
        //((ModeloTabla) pantalla.getTblListasMateriales().getModel()).clear();
        ((ModeloTablaListasMaterialesProv) pantalla.getTblListasMateriales().getModel()).setListaElementos(experto.buscarListaMaterialesProveedorSeleccionado());
        pantalla.setLocationRelativeTo(null);
        pantalla.setTitle("Listas de Materiales: "+experto.getProveedorSeleccionado().getNombre());
        pantalla.setVisible(true);
    }

    @Override
    public void finalizar() {
        pantalla.setVisible(false);
    }

    @Override
    public JInternalFrame getPantalla() {
        return null;
    }

    @Override
    public void continuar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    
    /**
     * crea una nueva lista de materiales
     */
    private void nuevaListaMateriales(ListaMateriales listaParaCopiar) {
        try {
            experto.crearNuevaListaMaterialesProveedorSeleccionado(listaParaCopiar);
        } catch (ExpertoProveedoresException ex) {
            JOptionPane.showMessageDialog(pantalla, "ERROR al crear la nueva lista de materiales:\nERROR: " + ex.getMessage(), "ERROR", JOptionPane.ERROR_MESSAGE);
        }
        ((ModeloTabla) pantalla.getTblListasMateriales().getModel()).clear();
        ((ModeloTablaListasMaterialesProv) pantalla.getTblListasMateriales().getModel()).setListaElementos(experto.buscarListaMaterialesProveedorSeleccionado());
    }
    
    /**
     * elimina la lista de materiales seleccionada
     */
    private void eliminarListaSeleccionada() {
        int seleccion = JOptionPane.showOptionDialog(
                null,
                "Esta seguro que desea eliminar la lista con fecha: " + experto.getListaSeleccionada().getFechainiciolistamateriales() + ""//Mensaje
                + "\nProveedor: " + experto.getProveedorSeleccionado().getNombre(),
                "ELIMINAR LISTA DE MATERIALES",//Título
                JOptionPane.YES_NO_OPTION,
                JOptionPane.QUESTION_MESSAGE,
                null, // null para icono por defecto.
                new Object[]{"Eliminar", "Cancelar"}, // null para YES, NO y CANCEL
                "Cancelar");
        if (seleccion == 0) {
            ListaMateriales lista;
            int fila = pantalla.getTblListasMateriales().getSelectedRow();
            lista = (ListaMateriales) ((ModeloTablaListasMaterialesProv) pantalla.getTblListasMateriales().getModel()).getListaElementos().get(fila);
            try {
                experto.eliminarLista(lista);
            } catch (ExpertoProveedoresException ex) {
                JOptionPane.showMessageDialog(pantalla, "ERROR al eliminar la lista de materiales seleccionada.\nERROR: " + ex.getMessage(), "ERROR", JOptionPane.ERROR_MESSAGE);
            }
            if (experto.getListaSeleccionada().getId().equals(lista.getId())) {
                controlaorProveedores.mostrarListaProveedor(null);
            }
            ((ModeloTablaListasMaterialesProv) pantalla.getTblListasMateriales().getModel()).clear();
            ((ModeloTablaListasMaterialesProv) pantalla.getTblListasMateriales().getModel()).setListaElementos(experto.buscarListaMaterialesProveedor(experto.getProveedorSeleccionado()));
            JOptionPane.showMessageDialog(pantalla, "Lista de Materiales eliminada correctamente", "INFORMACION", JOptionPane.INFORMATION_MESSAGE);

        }
    }
    
}
